home *** CD-ROM | disk | FTP | other *** search
/ Mission 3 / Mission 3.zip / Mission 3.iso / texte / jane152 / scl / fonlist.scl < prev    next >
Text File  |  1998-10-29  |  5KB  |  162 lines

  1. # Dieses Makropaket demonstriert die Verwaltung einer einfachen
  2. # Telefondatei. Die Datei wird zur Bearbeitung stets in eine globale
  3. # Listenvariable namens 'liste' eingelesen. Diese Variable enthält
  4. # immer abwechselnd einen Namen und eine Telefonnummer, dargestellt
  5. # durch Zeichenketten.
  6.  
  7. global liste;            # Die Listenvariable
  8.  
  9. # Der Makro 'datei_festlegen' fordert den Anwender auf, die Telefondatei
  10. # auszuwählen. Anschließend wird der Dateiname im SCEleton-Environment
  11. # gespeichert, damit er über die Lebensdauer der Makrosequenz hinaus
  12. # erhalten bleibt.
  13.  
  14. datei_festlegen()
  15. begin
  16.     set name to fileselect('C:\DIVERSE\*.*', '', 'Telefonliste auswählen');
  17.     if ( name != '' )        # Hat der Anwender 'Abbruch' gewählt?
  18.     begin
  19.         setenv('PHONELIST', name);    # Name speichern
  20.         lprint('Gewählt ist ''%s''', name);
  21.         return 1;            # Erfolg an Aufrufer melden
  22.     end
  23.     else
  24.     begin
  25.         lprint('Keine Datei gewählt.');    
  26.         return 0;            # Mißerfolg melden
  27.     end
  28. end
  29.  
  30. # Der Makro 'liste_sichern' schreibt den Inhalt von 'liste' in die Datei,
  31. # deren Name in der Environment-Variablen 'PHONELIST' steht. Das Dateiformat
  32. # besteht aus Zeilen, die jeweils einen Namen und die dazugehörige Nummer
  33. # enthalten, getrennt durch Kommata, und mit CR/LF abgeschlossen sind.
  34.  
  35. liste_sichern()
  36. begin
  37.     set name to getenv('PHONELIST');# Name aus dem Environment abrufen
  38.     if ( name == '' )                # Noch kein Name gespeichert?
  39.     begin
  40.         if ( datei_festlegen() )    # Dann den Anwender auffordern
  41.             set name to getenv('PHONELIST');
  42.         else
  43.             return 0;
  44.     end
  45.     set datei to Fcreate(name);        # Datei anlegen bzw. löschen
  46.     set i to 0;
  47.     set max to @liste;
  48.     while ( i < max )                # Liste durchlaufen
  49.     begin
  50.         set zeile to string("%s,%s\r\n",
  51.             liste[i], liste[i + 1]);    # eine Zeile formatieren
  52.         Fwrite(datei, 0, zeile);        # und in die Datei schreiben
  53.         set i to i + 2;
  54.     end
  55.     Fclose(datei);                    # Datei schließen
  56.     return 1;
  57. end
  58.  
  59. # 'liste_lesen' liest den Inhalt der Telefondatei in die Variable 'liste'.
  60. # Eine gelesene Zeile wird mit 'split' in Name und Nummer zerlegt und an die
  61. # Liste angehängt.
  62.  
  63. liste_lesen()
  64. begin
  65.     set name to getenv('PHONELIST');    # Name abrufen, wie oben
  66.     if ( name == '' )
  67.     begin
  68.         if ( datei_festlegen() )
  69.             set name to getenv('PHONELIST');
  70.         else
  71.             return 0;
  72.     end
  73.     set liste to $$$;
  74.     set datei to Fopen(name);            # Datei öffnen
  75.  
  76.     do
  77.     begin
  78.         set zeile to Freadline(datei);    # eine Zeile lesen
  79.         if ( zeile[0] != '' )
  80.         begin
  81.             set eintrag to split(zeile[0], ',');
  82.                                         # Eintrag zerlegen
  83.             set liste to liste ++ eintrag;
  84.         end
  85.     end
  86.     while ( zeile[1] != 1 );            # Bei Leerzeile Schleife beenden
  87.     Fclose(datei);                        # Datei schließen
  88.     return 1;
  89. end
  90.  
  91. # 'eintrag_einfuegen' gestattet es dem Anwender, einen neuen Namen in die
  92. # Liste aufzunehmen. Dazu werden Namen und Nummer im Dialog abgefragt. Falls
  93. # der Name schon existiert, wird nur die Nummer gemäß der Eingabe geändert.
  94.  
  95. eintrag_einfuegen()
  96. begin
  97.     if ( liste_lesen() == 0 )            # Liste in den Speicher holen
  98.     begin
  99.         lprint('Liste nicht verfügbar.');
  100.         return 0;
  101.     end
  102.     lprint("Neuer Name?");                # Name abfragen
  103.     set name to inputline();
  104.     lprint("Nummer?");                    # Nummer abfragen
  105.     set nummer to inputline();
  106.     set pos to liste ? name;
  107.     if ( pos >= 0 )                        # Prüfen, ob Name schon existiert
  108.     begin
  109.         lprint("Name existiert schon.");
  110.         set liste[pos + 1] to nummer;    # Neue Nummer hinter Namen speichern
  111.     end
  112.     else
  113.     begin
  114.         set liste to liste ++ name;        # Name und Nummer
  115.         set liste to liste ++ nummer;    # an die Liste anhängen
  116.     end
  117.     liste_sichern();                    # Liste wieder zurückschreiben
  118. end
  119.  
  120. # 'eintrag_loeschen' entfernt einen Namen nebst Nummer aus der Liste. Dazu
  121. # wird der Name im Dialog abgefragt.
  122.  
  123. eintrag_loeschen()
  124. begin
  125.     if ( liste_lesen() == 0 )            # Liste in den Speicher holen
  126.     begin
  127.         lprint('Liste nicht verfügbar.');
  128.         return 0;
  129.     end
  130.     lprint("Welchen Namen löschen?");    # Name abfragen
  131.     set name to inputline();
  132.     set pos to liste ? name;            # Position in der Liste bestimmen
  133.     if ( pos < 0 )
  134.     begin
  135.         lprint("Name existiert nicht.");
  136.         return 0;
  137.     end
  138.     delete liste[i:2];                    # Name & Nummer löschen
  139.     liste_sichern();                    # Liste wieder zurückschreiben
  140. end
  141.  
  142. # 'liste_anzeigen' 'druckt' den Inhalt der Liste in das 'SCEleton'-Fenster.
  143.  
  144. liste_anzeigen()
  145. begin
  146.     if ( liste_lesen() == 0 )            # Liste in den Speicher holen
  147.     begin
  148.         lprint('Liste nicht verfügbar.');
  149.         return 0;
  150.     end
  151.     set len to @liste;
  152.     set i to 0;
  153.     while ( i < len )                    # Zeile für Zeile ausgeben
  154.     begin
  155.         lprint('Nr: %3d, Name: %20s, Tel: %20s', 
  156.                 i / 2 + 1, liste[i], liste[i + 1]);
  157.                         # Name und Nummer formatieren & durchnummerieren
  158.         set i to i + 2;
  159.     end
  160. end
  161.  
  162.